python的pandas修改数据

需要解决dateframe指定行数据修改
具体需求:在Excel通过pandas读取后,只对date列为2023-09-12的con_limit_up列数据乘系数0.7和date列为2023-09-11的con_limit_up列数据乘系数0.4,其他时间列con_limit_up列数据赋值为0
amount date stock con_limit_up weight close volume
1 2023-09-10 SZSE.002855 7 0.24137931 21.01 39373185
2 2023-09-10 SZSE.000536 6 0.206896552 3.19 329833157
3 2023-09-10 SZSE.002338 2 0.068965517 42.55 21839136
4 2023-09-10 SZSE.001296 2 0.068965517 27.39 19882309
5 2023-09-10 SHSE.688418 2 0.068965517 23.38 49512234
6 2023-09-10 SHSE.605365 2 0.068965517 18.03 19213361
1 2023-09-11 SZSE.002855 8 0.19047619 23.11 54270864
2 2023-09-11 SHSE.600895 4 0.095238095 23.74 282015669
3 2023-09-11 SHSE.605588 4 0.095238095 61.3 512700
4 2023-09-11 SZSE.002338 3 0.071428571 46.81 51592271
5 2023-09-11 SZSE.002145 1 0.023809524 5.75 83848262
6 2023-09-11 SZSE.002207 1 0.023809524 8.01 44110395
7 2023-09-11 SZSE.002284 1 0.023809524 10.37 70841077
8 2023-09-11 SZSE.002577 1 0.023809524 16.41 27840466
9 2023-09-11 SZSE.002795 1 0.023809524 8.8 36522471
10 2023-09-11 SZSE.002902 1 0.023809524 24.89 38906542
11 2023-09-11 SZSE.002970 1 0.023809524 33.33 10525270
12 2023-09-11 SZSE.002995 1 0.023809524 25.42 8306519
1 2023-09-12 SZSE.000536 6 0.157894737 3.2 565375316
2 2023-09-12 SZSE.000851 3 0.078947368 6.91 106487499
3 2023-09-12 SZSE.001268 3 0.078947368 29.41 19713282
4 2023-09-12 SHSE.605365 2 0.052631579 18.32 14024907
5 2023-09-12 SZSE.000766 2 0.052631579 9.42 71311125
6 2023-09-12 SZSE.001313 2 0.052631579 10.15 38803817
7 2023-09-12 SZSE.002902 2 0.052631579 27.38 30893387
8 2023-09-12 SHSE.600186 1 0.026315789 5.29 161293039
9 2023-09-12 SHSE.600520 1 0.026315789 14.89 10034810
10 2023-09-12 SHSE.600719 1 0.026315789 8.12 41404562
11 2023-09-12 SZSE.002355 1 0.026315789 7.44 132727319
12 2023-09-12 SZSE.002957 1 0.026315789 17.71 20109535
1 2023-09-13 SZSE.000536 7 0.2 3.52 293595726
2 2023-09-13 SZSE.001268 4 0.114285714 32.35 18565980
3 2023-09-13 SZSE.002855 3 0.085714286 24.27 48837726
4 2023-09-13 SHSE.603607 2 0.057142857 19.97 11755208
5 2023-09-13 SHSE.600802 1 0.028571429 5.73 43656592
6 2023-09-13 SHSE.603162 1 0.028571429 18.9 14676241
7 2023-09-13 SHSE.603909 1 0.028571429 14.03 2030741
8 2023-09-13 SHSE.603933 1 0.028571429 18.6 11165879
9 2023-09-13 SZSE.000010 1 0.028571429 3.1 84282602
10 2023-09-13 SZSE.000058 1 0.028571429 7.94 67060210


import pandas as pd

data=pd.DataFrame(columns=['amount' ,'date' ,'stock' ,'con_limit_up' ,'weight' ,'close', 'volume']
                  ,data=[[1,'2023-09-10','SZSE.002855' ,7 ,0.24137931 ,21.01, 39373185],
                         [2, '2023-09-11' ,'SZSE.002855', 8 ,0.19047619 ,23.11, 54270864],
                         [3 ,'2023-09-12', 'SZSE.000536' ,6, 0.206896552 ,3.19 ,329833157]])
data.loc[data['date']=='2023-09-12',['con_limit_up']]=data[data['date']=='2023-09-12']['con_limit_up']*0.7
data.loc[data['date']=='2023-09-11',['con_limit_up']]=data[data['date']=='2023-09-11']['con_limit_up']*0.4
data.loc[(data['date']!='2023-09-12') & (data['date']!='2023-09-11'),'con_limit_up']=0

img

  • 我的思路:
    1、用筛选方法把数据分成三个DataFrame:乘系数0.7和0.4的、其它数据;
    2、分别操作乘系数0.7、0.4、置0后,合并三个DataFrame,排序输出。

【以下回答由 GPT 生成】

要通过pandas修改DataFrame的特定行数据,可以使用.loc方法来选择和修改数据。具体步骤如下:

  1. 首先,导入pandas库并读取Excel文件生成DataFrame对象。
  2. 根据条件选择需要修改的行,使用.loc方法进行操作。
  3. 使用.loc方法选择符合条件的行,并指定需要修改的列。
  4. 修改所选行的特定列的数据,可以通过等号赋值或者进行数学运算来修改数据。
  5. 对于其他不需要修改的行,可以使用.loc方法选择并修改特定列,将其赋值为0。

下面是具体的代码示例:

import pandas as pd

# 读取Excel文件生成DataFrame对象
df = pd.read_excel('your_file_path.xlsx')

# 修改符合条件的行的特定列数据
df.loc[df['date'] == '2023-09-12', 'con_limit_up'] *= 0.7
df.loc[df['date'] == '2023-09-11', 'con_limit_up'] *= 0.4

# 修改其他不需要修改的行的特定列数据为0
df.loc[~((df['date'] == '2023-09-12') | (df['date'] == '2023-09-11')), 'con_limit_up'] = 0

# 打印修改后的DataFrame
print(df)

这样就可以按照条件对DataFrame的特定行数据进行修改了。请将your_file_path.xlsx替换为实际的Excel文件路径。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^