lizy169 发表于 2022-4-18 21:34

python列表DataFrame&Series问题

万能的吾爱,请教各路大神:



我想把它转成


请问如何操作???方法越多越好

转成字符串来乘,然后再转回float,结果却不是我需要的。。。

df['z_price'] = df['price'].astype(str)
data = []
for x, y in zip(df['z_price'], df['quantity']):
    list_dat = x * y
    data += list_dat
print(data)
['2', '.', '1', '2', '.', '1', '2', '.', '2', '2', '.', '3', '2', '.', '3', '2', '.', '3', '1', '.', '8']

请各路大神指点,谢谢

zxc9989 发表于 2022-4-18 21:34

本帖最后由 zxc9989 于 2022-4-19 10:26 编辑

一:import pandas as pd

data = pd.DataFrame({'price':, 'quantity':})
new_data = data['price'].repeat(data['quantity'])
new_data.index = range(1, new_data.shape+1)
print(new_data)

二(生成器):
import pandas as pd

def repeat(data:pd.DataFrame):
    for item in data.iterrows():
      yield from (item['price'] for _ in range(int(item['quantity'])))

data = pd.DataFrame({'price':, 'quantity':})
data = pd.Series(repeat(data))
print(data)

d8349565 发表于 2022-4-18 22:07

把两列数据提取为列表,参考tolist()
然后拼接到同一个列表,写入df中的一列,重制index

方法二
把两列分别转为两个df
使用concat拼接

pd.concat(,axis=0)# 合并,与merge的区别,自查(特别注意要使用[])

d8349565 发表于 2022-4-18 22:09

d8349565 发表于 2022-4-18 22:07
把两列数据提取为列表,参考tolist()
然后拼接到同一个列表,写入df中的一列,重制index



补充
df也可以使用round方法设置保留多少位小数点

lizy169 发表于 2022-4-18 22:38

d8349565 发表于 2022-4-18 22:09
补充
df也可以使用round方法设置保留多少位小数点

d1 = df['price'].tolist()
d2 = df['quantity'].tolist()
d3 = d1 + d2
print(d3)



结果不对哦。。。

lizy169 发表于 2022-4-18 22:42

单价2.1对应的数量是2,单价2.2对应的数量是1,单价2.3对应的数量是3,单价1.8对应的数量是1
我想得到一组这样的数据:

wuliandang 发表于 2022-4-18 23:39

本帖最后由 wuliandang 于 2022-4-18 23:46 编辑

import pandas as pd
# 源数据
source_index =
source_data = pd.DataFrame({'price':,'quantity':},index=source_index)
# source_data

target_data = []
# 以正常人的思维,一个一个元素添加到列表
for i in source_index:# 遍历行
    for j in range(source_data['quantity']):# 遍历从0~quantuty的值
      target_data.append(source_data['price'])# 弄到列表里

print(target_data)
# print(pd.Series(target_data))

lizy169 发表于 2022-4-19 08:37

wuliandang 发表于 2022-4-18 23:39
import pandas as pd
# 源数据
source_index =


    for j in range(source_data['quantity']):# 遍历从0~quantuty的值
TypeError: 'Series' object cannot be interpreted as an integer

出现这样的错误

gzq830510 发表于 2022-4-19 09:13

lizy169 发表于 2022-4-19 08:37
for j in range(source_data['quantity']):# 遍历从0~quantuty的值
TypeError: 'Series' object c ...

因为他没取索引,加个loc就可以了,也可以像下面一样,用一重循环。
import pandas as pd
source_index =
source_data = pd.DataFrame({'price':,'quantity':},index=source_index)
target_data = []
""" for i in source_index:
    for j in range(source_data['quantity'].loc):
      target_data.append(source_data['price'].loc) """
for i in source_index:
    target_data.extend(.loc] * source_data['quantity'].loc)
print(pd.Series(target_data))

nanhai31 发表于 2022-4-19 09:17

本帖最后由 nanhai31 于 2022-4-19 09:19 编辑

wuliandang 发表于 2022-4-18 23:39
import pandas as pd
# 源数据
source_index =


这样吧应该是
页: [1] 2
查看完整版本: python列表DataFrame&Series问题